/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.concreto;

import bean.CaracteristicasConsulta;
import bean.ConsultaDiagnostico;
import bean.Prueba50m;
import bean.PruebaResistencia;
import interfaces.IDAOFisico1;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.InstanceNotFoundException;


/**
 *
 * @author Usuario
 */
public class DAOFisico1 implements IDAOFisico1 {

    protected ResourceBundle rb;

    public DAOFisico1() {
        rb = ResourceBundle.getBundle("sql.sqlFisico1");
    }

    public String insertarPrueba50m(Connection conn, CaracteristicasConsulta oCaracteristicasConsulta) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call insertar_diagnosticoxfis50ms(?,?,?,?)}");
            cllStatement.setString(1, oCaracteristicasConsulta.getIdConsulta());
            cllStatement.setString(2, oCaracteristicasConsulta.getId_caracteristica());
            cllStatement.setString(3, oCaracteristicasConsulta.getCalificacion());
            cllStatement.setString(4, oCaracteristicasConsulta.getIdEvaluacionPaciente()); 
    
            cllStatement.registerOutParameter(5, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(5);

            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public ResultSet conseguirPacientesDia(Connection conn, String pull, Date fecha) throws InstanceNotFoundException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            int i = 0;
            ps = conn.prepareStatement(rb.getString("SQL_PACIENTES_DEL_DIA"));
            ps.setDate(++i, fecha);
//            ps.setString(++i,  "2008-04-27");
            ps.setString(++i, pull);
            rs = ps.executeQuery();
//            while(rs.next()){
//            System.out.println("si hay nextttttt");
//            }
            return rs;
        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
//            try {
////                ps.close();
//            } catch (SQLException ex) {
//                Logger.getLogger(DaoDiagnosticoConsulta.class.getName()).log(Level.SEVERE, null, ex);
//            }
        }
        return null;
    }

    

    
    public Double redondear(Double numero, int decimales) {
        return Math.round(numero * Math.pow(10, decimales)) / Math.pow(10, decimales);
    }

    public String insertarPruebaResistencia(Connection conn, PruebaResistencia oPruebaResistencia) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call insertarPruebaResistencia(?,?,?,?,?,?)}");
            cllStatement.setString(1, oPruebaResistencia.getPaciente());
            cllStatement.setInt(2, oPruebaResistencia.getEvaluacion());
            cllStatement.setString(3, oPruebaResistencia.getSegundo());
            cllStatement.setInt(4, oPruebaResistencia.getFrecuencia());
            cllStatement.setDouble(5, oPruebaResistencia.getDistancia());
            cllStatement.setString(6, oPruebaResistencia.getEspecialista());
            cllStatement.registerOutParameter(7, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(7);
            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public String insertarDiagnosticoResistencia(Connection conn, CaracteristicasConsulta oCaracteristicasConsulta) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call insertardiagnosticoxresistencia(?,?,?,?,?,?,?)}");
            cllStatement.setString(1, oCaracteristicasConsulta.getId_paciente());
            cllStatement.setBigDecimal(2, oCaracteristicasConsulta.getNro_evaluacion());
            cllStatement.setString(3, oCaracteristicasConsulta.getId_caracteristica());
            cllStatement.setString(4, oCaracteristicasConsulta.getCod_especialidad());
            cllStatement.setString(5, oCaracteristicasConsulta.getId_super());
            cllStatement.setString(6, oCaracteristicasConsulta.getCalificacion());
            cllStatement.setString(7, oCaracteristicasConsulta.getId_especialista());
            cllStatement.registerOutParameter(8, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(8);

            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public String insertarCaracteristicaResistencia(Connection conn, CaracteristicasConsulta oCaracteristicasConsulta) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call insertarcaracteristicaxresistencia(?,?,?,?,?,?,?)}");
            cllStatement.setString(1, oCaracteristicasConsulta.getId_paciente());
            cllStatement.setBigDecimal(2, oCaracteristicasConsulta.getNro_evaluacion());
            cllStatement.setString(3, oCaracteristicasConsulta.getId_caracteristica());
            cllStatement.setString(4, oCaracteristicasConsulta.getCod_especialidad());
            cllStatement.setString(5, oCaracteristicasConsulta.getId_super());
            cllStatement.setString(6, oCaracteristicasConsulta.getCalificacion());
            cllStatement.setString(7, oCaracteristicasConsulta.getId_especialista());
            cllStatement.registerOutParameter(8, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(8);

            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public ArrayList buscarResultadosResistencia(Connection conn, String paciente, String evaluacion) throws InstanceNotFoundException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            int i = 0;

            ps = conn.prepareStatement(rb.getString("SQL_BUSCAR_RESULTADOS_RESISTENCIA"));
            ps.setString(++i, paciente);
            ps.setString(++i, evaluacion);
            rs = ps.executeQuery();
            ArrayList retorno = new ArrayList();
            while (rs.next()) {
                retorno.add(crearObjeto(rs));
            }
            return retorno;


        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            try {
                rs.close();
                ps.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    private ConsultaDiagnostico crearObjeto(ResultSet rs) throws SQLException {
        ConsultaDiagnostico oConsultaDiagnostico = new ConsultaDiagnostico();
        oConsultaDiagnostico.setNomCaracteristica(rs.getString("nomCaracteristica"));
        oConsultaDiagnostico.setDescripcion(rs.getString("Calificacion"));
        //para no crear otro bean meti el valor en categoria..machete activao.
        oConsultaDiagnostico.setCategoria(rs.getString("Valor"));
        return oConsultaDiagnostico;
    }

    public ArrayList buscarResultadosResistenciaOrganica(Connection conn, String paciente, String evaluacion) throws InstanceNotFoundException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            int i = 0;

            ps = conn.prepareStatement(rb.getString("SQL_BUSCAR_RESULTADOS_RESISTENCIA_ORGANICA"));
            ps.setString(++i, paciente);
            ps.setString(++i, evaluacion);
            rs = ps.executeQuery();
            ArrayList retorno = new ArrayList();
            while (rs.next()) {
                retorno.add(crearObjetoOrganica(rs));
            }
            return retorno;


        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            try {
                rs.close();
                ps.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    private ConsultaDiagnostico crearObjetoOrganica(ResultSet rs) throws SQLException {
        ConsultaDiagnostico oConsultaDiagnostico = new ConsultaDiagnostico();
        oConsultaDiagnostico.setNomCaracteristica(rs.getString("nomCaracteristica"));
        oConsultaDiagnostico.setDescripcion(rs.getString("Calificacion"));
        return oConsultaDiagnostico;
    }

       private Prueba50m crearObjetoVelocidad(ResultSet rs) throws SQLException {
        Prueba50m oPrueba50m = new Prueba50m();
        oPrueba50m.setId(rs.getString("id_caracteristica"));
        oPrueba50m.setMetros(rs.getString("calificacion"));
        return oPrueba50m;
    }

    public String totalResistenciaInstitucion(Connection conn, String institucion) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call total_participantes_resistencia(?)}");
            cllStatement.setString(1, institucion);
            cllStatement.registerOutParameter(2, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(2);
            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public String totalVelocidadInstitucion(Connection conn, String institucion) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call total_participantes_velocidad(?)}");
            cllStatement.setString(1, institucion);
            cllStatement.registerOutParameter(2, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(2);
            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public String puestoResistenciaTotal(Connection conn, String institucion, String cedula) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call puesto_resistencia_total(?,?)}");
            cllStatement.setString(1, institucion);
            cllStatement.setString(2, cedula);
            cllStatement.registerOutParameter(3, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(3);
            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

    public String puestoVelocidadTotal(Connection conn, String institucion, String cedula) {
        String sRetorno = "";
        CallableStatement cllStatement = null;
        try {
            cllStatement = conn.prepareCall("{ ? = call puesto_velocidad_total(?,?)}");
            cllStatement.setString(1, institucion);
            cllStatement.setString(2, cedula);
            cllStatement.registerOutParameter(3, Types.VARCHAR);
            cllStatement.executeUpdate();
            sRetorno = cllStatement.getString(3);
            return sRetorno;
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                cllStatement.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return sRetorno;
    }

     

         public ArrayList getPrueba50m(Connection conn, String paciente, String evaluacion) throws InstanceNotFoundException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            int i = 0;

            ps = conn.prepareStatement(rb.getString("SQL_CONSEGUIR_GRAFICA_VELOCIDAD"));
            ps.setString(++i, paciente);
            ps.setString(++i, evaluacion);
            rs = ps.executeQuery();
            ArrayList retorno = new ArrayList();
            while (rs.next()) {
                retorno.add(crearObjetoVelocidad(rs));
            }
            return retorno;


        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            try {
                rs.close();
                ps.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOFisico1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }
}
